perm filename SC2X.F4[SCR,LCS]2 blob sn#374039 filedate 1978-08-12 generic text, type T, neo UTF8
00100		SUBROUTINE READIT
00200		COMMON /PCIP/ PCH(27,102),IPT(27,101) /ERRFLG/ERRFLG
00300		COMMON/P/P(1) /PL/PL(1) /COPY/NUMP
00400	
00500		COMMON /Q/ BNW(200),NWZ /INS/INST(27),BG(60) /TYP/SOS,JOUT,
00600		1 LN,ITYP,TPALN(4),JED  /NAMES/NA(100),LETRS(27),JNAM(27)
00700	CC	1 LN,ITYP,TPALN(4),JED   /IFI/IFI
00800	CC 7/74 COLGATE  COMMON/TYP/ IS FOR COLTTY ROUT.
00900		COMMON /VV/LIMIT,V(1) /A/ROFF(27),NP(27)
01000		1,RDEV(27),XT(27),OTH(20,16),P1(27),JFM(4),IFM(80)
01100		1 ,FINM(6),TINST(5),ENFI(5),TEDIT(4),INVIS(27)
01200		DIMENSION IV(1),LIST(78),JNP(80),KNP(15)
01300	C   WITH VX,IOUT AT 70 AND IFM AT 80 OK FOR ONLY 
01400	C   40 LIT CHARS + 30 PARAMS PER INST.
01500	C   60 BG TIMES AVAILABLE.  FOR INSTS AND INSERTS AND EDITS.
01600		COMMON J,L,CNT(27),BT,MK,DF,DUR(27)
01700		1/E/IQ(27),KL,X,ZPAR,KA,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
01800		1 ,INP(145),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
01900		COMMON/B/MOT,PR,T5,NINS,I,RA,KZY,NWX,INONLY,MX,
02000		1 Y,Z,ISLAC,MZ,N,IDALL,JC,JG,RB,IJ,IX,BW,KB,NL,RC,W,
02100		1 ZZ,CHN,YY 
02200		1 /D/TF,AMPFAC,OP1,DURX,IXIN,IFLNM
02300		1  /C/LPAR,IPRN,QX,RETRO,INVRT,ICON,LCNT,
02400		1 PARENS,JZ,BY,MLX,IZ,ALL,JD,LEND,QTS,ITMP,
02500		1 LP,ILIT,NLIT,KTMP,IC,RAX,RD,IA
02600	C  /C/=26
02700		EQUIVALENCE (VX1,VX(1)),(KNP,JNP,INP1,INP(1)),(IPP,ISCA(2))
02800		1 ,(ISS,ISCA(9)),(ITT,ISCA(11))
02900		1 ,(IE,ISCA(5)),(ID,ISCA(3)),(IF,ISCA(6)),(IAA,ISCA(10))
03000		1 ,(VX2,VX(2)),(VX3,VX(3)),(VX4,VX(4)),(IDOT,IDAT(11))
03100		1 ,(V,IV),(LIST,IFM(3)),(IG,ISCA(8))
03200		DATA TINST /25H(' TYPE INST NAME, ETC'/)/,KSLA/'/'/
03300		1,TEDIT/20H(' RETYPE LINE?'/  )/,IEN/'N'/,ITMPO/'TEMPO'/
03400	C   *************** READS INPUT  ***********************
03500	
03600		ERRFLG=0
03700		KIMIT=LIMIT-100
03800	C  FOR WARNING ABOUT BUFFER OVERLOAD (LABEL 1774)
03900		ICHD=0
04000	2308	IF(ITYP)GO TO 2127
04100	23081	TYPE TINST
04200		ACCEPT 77732,JNP
04300		IF(JNP(1).EQ.'	')GO TO 23081
04400	CHECK FOR TAB
04500	77732	FORMAT(80A1)
04600	CC	IF(JED)WRITE(21,77732)INP
04700		IF(JED)CALL COLTTY(JNP,21)
04800		JFM(4)='80A1)'
04900	C  PUTS ON LPT AND TTY
05000		GO TO 1074
05100	CC 6/74 COLGATE2127	JREAD=1
05200	CC 6/74 COLGATE 4400	READ(1,77732,END=2337)JNP
05300	2127	IF(READER(JNP))CALL RUNIT
05400	C  READS A LINE.  IF END OF FILE, JUMPS.
05500	CC  SEE END OF PG.6	IF(SOS)WRITE(JOUT,87732)INP
05600	CC 7/74	IF(SOS)CALL COLTTY(JNP,JOUT,3)
05700	CC 6/74  COLGATE 	GO TO(441,442,443,444,445,446)JREAD
05800	
05900	441	JFM(4)='80A1)'
06000	CC	IF(IFI.GE.0)GO TO 1074
06100		IF(LN.EQ.0)GO TO 1074
06200	CC	REREAD 2114,LN,JNP
06300	C****  READS FILES WITH OR WITHOUT LINE NUMBERS! **** NOT AT STANFORD
06400	CC	IF(JNP(1).EQ.'	')GO TO 2308
06500	CHECK FOR TAB ***** DOESN'T DO WITH SOS FILES ******
06600		JFM(1)=' (I,A'
06700		CALL FMT(JFM,JNP,MLX)
06800		REREAD JFM,LN,J,JNP
06900		GO TO 4127
07000	1074	IF(INP1.EQ.IBLA.OR.INP1.EQ.32347529280)GO TO 2308
07100	C  ABOVE FOR COMMENTS DOESN'T CATCH THIS WITH SOS FILES⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗⊗
07200	C  BIG NUM = '<'
07300		IF(INP1.EQ.'	')GO TO 2308
07400	CHECK FOR TAB
07500		JFM(1)='   (A'
07600		CALL FMT(JFM,JNP,MLX)
07700		REREAD JFM,J,JNP
07800	4127	IF(JED)GO TO 41271
07900		IF(K.EQ.'Y')GO TO 41271
08000	C  K CHECK IS TO PASS AFTER RETYPING
08100		TYPE TEDIT
08200		ACCEPT 77732,K
08300		IF(K.EQ.'Y')GO TO 23081
08400		IF(K.EQ.IG)JED=-1
08500	
08600	
08700	41271	IF(J.EQ.IBLA)GO TO 2308
08800	CHECKS FOR SPACE(IBLA)
08900		LLETRS=MLX
09000	C  LETRS FOR NAME CHANGE FEATURE AT 104
09100		MLX=1
09200		IZ=0
09300		JA=-1
09400		ISUB=4
09500		CALL CLEAN(LEND)
09600	C  CLEANS OUT = AND , AND FINDS LINE LENGTH.
09700		ALL=1.
09800		VX1=0
09900		VX2=0
10000		VX3=0
10100		LK=-1
10200		K=0
10300		JRSTA=0
10400		IOFSET=0
10500	C** IOFSET IS FOR 'CONTINUATION PARAMETERS' - SO INPUT P'S MATCH INST.
10600	C** CAUTION!!!  ANY 'OFFSET' PARAMS THAT ARE REFERRED TO AFTER AN 'END'
10700	C** MUST USE THE PROPER INTERNAL NUMB. OF SCORE, NOT THE INST. PARAM!!!!!
10800		IF(V(I-1).NE.-9900.-BY)GO TO 364
10900		BY=-1.
11000		I=I-1
11100	364	DO 361 JD=1,LEND
11200		N=INP(JD)
11300		IF(N.NE.'R')GO TO 361
11400	C  LOOKS FOR 'RESTART'
11500		DO 3611 M=JD,LEND
11600		KL=INP(M)
11700		IF(KL.EQ.IBLA)GO TO 3631
11800		IF(KL.EQ.ISEMI)GO TO 3631
11900	CCZZZ IF(KL.EQ.IBLA.OR.KL.EQ.ISEMI.OR.KL.EQ.KSLA.OR.KL.EQ.',')GO TO 3631
12000	3611	INP(M)=IBLA
12100	C   CHANGES 'RESTART' TO BLANKS
12200	3631	DO 363 N=1,NINS
12300		IF(J.NE.INST(N))GO TO 363
12400		IQ(N)=-1
12500	C   SETS RESTART FLAG.  THIS INST WILL NOW APPEAR WITH NEW NUM.
12600		JRSTA=J
12700		GO TO 362
12800	363	CONTINUE
12900	361	IF(N.EQ.ISEMI)GO TO 6773
13000	6773	K=K+1
13100		IF(K.GT.NINS)GO TO 36
13200		IF(INST(K).NE.J)GO TO 6773
13300		IF(IQ(K).EQ.-1)GO TO 6773
13400	C   FINDS CORRECT INST NUM.  PASSES RESTARTED INSTS.
13500		LK=K
13600		GO TO 1773
13700	36	IF(J.EQ.'RUN;')GO TO 197
13800		IF(J.NE.'RUN')GO TO 97
13900	197	CALL RUNIT
14000	97	IF(J.EQ.'INSER')GO TO 397
14100		IF(J.EQ.'PRECE')GO TO 397
14200		IF(J.NE.'EDIT')GO TO 297
14300	397	ISUB=6  
14400	297	IF(ISUB.GT.4)GO TO 1773
14500		IF(J.EQ.ITMPO)GO TO 1773
14600		IF(J.EQ.'CONDU')GO TO 1773
14700		IF(J.EQ.'PLAY')GO TO 1773
14800		IF(J.EQ.'SECTI')GO TO 1081
14900	C******************  ABOVE AND BELOW FOR 'SECTIONS'
15000		IF(J.EQ.'END')GO TO 1082
15100		IF(J.EQ.'END S')GO TO 1082
15200		IF(J.EQ.'FINIS')GO TO 1082
15300	362	LK=NINS+1
15400		IF(LK.GT.KZY)CALL ERR(7)
15500		INST(LK)=J
15600		LETRS(LK)=LLETRS
15700	C  SAVE HOW MANY LETTERS IN INST. NAME (FOR 'RUNIT')
15800		IZ=LK
15900		GO TO 1773
16000	
16100	C*********** DOWN TO 8001 FOR 'SECTIONS'
16200	1083	V(I)=-99.
16300		KL=1
16400		GO TO 3083
16500	C  READS 'PLAY SECT. N1,N2'
16600	1081	V(I)=-199.
16700		KL=4
16800	3083	DO 2081 K=KL,72
16900	C******  OR 80 ↑↑↑↑↑↑↑↑↑ ?????
17000		IF(INP(K).EQ.IBLA)GO TO 2081
17100		IV(I+1)=INP(K)
17200		I=I+2
17300	3081	BY=-1.
17400		GO TO 2308
17500	2081	CONTINUE
17600	C   READS SECTION IDENTIFIER, -199. MARKS BEGINNING
17700	C1082	IF(V(I-1).EQ.-9900.-BY)I=I-1
17800	C********* FEB 15,71
17900	1082	V(I)=-299.
18000		I=I+1
18100		GO TO 3081
18200	C   MARKS END OF SECTION
18300	C************************
18400	
18500	8001	FORMAT(A5,5F)
18600	107	FORMAT(I,A5,5F)
18700	4	IF(LK.LE.NINS)GO TO 8773
18800		IF(ALL.GT.0)GO TO 1004
18900		IF(IDALL.GT.0)GO TO 8773
19000		BG(LK)=VX1
19100		IDALL=LK
19200		GO TO 2004
19300	C 'MOVE' CHANGES IN 'ALINS' CAN'T BE RESET IN INDIV. INSTS.
19400	1004	BG(LK)=VX1
19500		IF(LK.EQ.IZ)VX1=0
19600	C   MAY 3,71 **** ALL PARAMS WILL BE SET UP AT TIME 0.
19700	C   CHECK EFFECT ON 'MOVE'!
19800	C ******** APR.23, 1971  FIXES BG TIMES IN 'MOVE'?????!!!!!!!
19900	2004	NINS=LK
20000		IF(VX3.NE.0)VX2=10000.+VX3
20100		IF(VX2.EQ.0)VX2=-1
20200		DUR(LK)=VX2
20300		GO TO 900
20400	C******** ABOVE FOR REST ONLY ENTRIES.  FEB 18,71
20500	8773	IF(VX2.EQ.0)GO TO 900
20600	C 2 NUMBS HERE MEAN START ON NOTE NUM.VX2 OF INST.VX1
20700		IF(VX1.EQ.0)VX1=LK
20800	C VX1=0 MEANS USE NUMB. OF THIS INST.
20900		VX1=VX1*10000.+VX2
21000	900	IF(VX1.NE.BY)GO TO 497
21100		IF(J.NE.'PLAY')GO TO 5773
21200	C*********** 'PLAY' IS FOR 'SECTIONS'
21300	497	BY=VX1
21400	C  BY=CURRENT BG TIME.
21500		V(I)=-9900.-BY
21600		I=I+1
21700		IF(NWZ.NE.0)CALL BGSORT(BY)
21800	5773	IF(JRSTA.EQ.0)GO TO 3173
21900		DO 173 K=NINS-1,1,-1
22000	173	IF(JRSTA.EQ.INST(K))GO TO 1173
22100	1173	VX1=K
22200		GO TO 7720
22300	C GO DO A 'DUPL'
22400	2173	JRSTA=0
22500	3173	IF(J.EQ.ITMPO)GO TO 1106
22600		IF(J.EQ.'CONDU')GO TO 3018
22700		IF(J.EQ.'PLAY')GO TO 1083
22800	C*********** ABOVE FOR 'SECTIONS'
22900	
23000	
23100	4773	NW=LPAR
23200	CZZZZZZZ	MLX=ML
23300		ML=MLX
23400		IF(I.LT.KIMIT)GO TO 774
23500		TYPE 107,I
23600		IF(I.GE.LIMIT)TYPE 1774
23700	1774	FORMAT(/' ******* TOO MUCH INPUT DATA!!   USE "MIXSCR" *******'/)
23800	774	ALL=1.
23900		DF=0
24000		ISUB=1
24100	CXXX	IF(MLX.LT.LEND)GO TO 17732
24200	CXXX THIS LOST ON );Px . . . ;  TAKEN OUT 8/20/76
24300	CXXX	GO TO 7773
24400	
24500	CZZZZZZZZZZZZZZZZZZZZZZZZ
24600	1299	IF(MLX.LE.LEND)GO TO 1773
24700	CZZZZZZZZZZZZZZZ .LT. ZZZZZZZZZZZZ
24800	
24900	
25000	7773	IF(READER(JNP))CALL RUNIT
25100	C  READS A LINE.  IF END OF FILE, JUMPS.
25200	CQQQ	IF(INP1.EQ.IBLA)GO TO 7773
25300		IF(INP1.EQ.IBLA.OR.INP1.EQ.32347529280)GO TO 7773
25400	C  ABOVE FOR COMMENTS.  BIG NUM = '<'
25500		IF(JED)GO TO 77733
25600		TYPE TEDIT
25700		ACCEPT 77732,K
25800		IF(K.NE.'Y')GO TO 442
25900		TYPE TPALN
26000		ACCEPT 77732,JNP
26100	442	IF(K.EQ.IG)JED=-1
26200	C   DOESN'T WORK FOR EDITS AND INSERTS YET???
26300	
26400	
26500	77733	MLX=1
26600	C  FOR CONTINUATION LINES.(CAN'T 'CONTINUE' TWICE IN A ROW!!)
26700	C   'LISTS' MUST END WITH ; IN NEW(7/74) VERSION. 
26800		CALL CLEAN(LEND)
26900	1773	IF(IPRN.EQ.0)GO TO 17732
27000		L=I-1
27100		IF(QTS.GE.0)GO TO 597
27200		IF(V(I-1).EQ.999.)L=L-1
27300	597	IPRN=IPRN-1
27400		IF(PARENS.EQ.0)GO TO 17733
27500		PARENS=0
27600		LIST(LCNT+2)=L
27700		LCNT=LCNT+3
27800		IF(IPRN.EQ.0)GO TO 17732
27900		IPRN=0
28000	17733	LIST(MOT)=L
28100		MOT=0
28200	C   FOR ERROR TRAP
28300	
28400	CC17732	JZ=0
28500	17732	N=0
28600	17731	ML=MLX
28700	
28800	C   BIG LOOP -- TO END OF PAGE 1.
28900		JPP=-1
29000	C FOR OLD 'DF' STUFF.  CHECKS FOR A Pn
29100		JD=ML
29200	975	N=INP(JD)
29300		IF(N.EQ.IBLA)GO TO 236
29400		IF(N.EQ.IPP)JPP=0
29500	C FOUND  'P'
29600	CCZZZ	IF(N.EQ.IBLA.OR.N.EQ.',')GO TO 236
29700	C ((((())))) MAY 13,71 /Z (D4/E/X 2 3)/ CS/ ETC.  CAN USE 26 LABELS.
29800	33611	IF(N.EQ.'(')GO TO 697
29900		IF(N.NE.')')GO TO 2361
30000	697	INP(JD)=IBLA
30100		L=JD-1
30200	5113	IF(INP(L).NE.IBLA)GO TO 2113
30300		L=L-1
30400		GO TO 5113
30500	2113	IF(N.EQ.')')GO TO 3361
30600		IF(PARENS.EQ.0)GO TO 1140
30700		LCNT=LCNT+3
30800		IF(MOT.NE.0)CALL ERR(3)
30900		MOT=LCNT-1
31000	1140	DO 11401 JC=1,LCNT-1,3
31100		IF(INP(L).NE.LIST(JC))GO TO 11401
31200	C  FINDS DUPLICATE IDENTIFIER
31300		TYPE 11402,INP(L)
31400	CC	CALL EXIT
31500	
31600	11402	FORMAT(' ****** MOTIVIC (',A1,') USED TWICE')
31700	11401	CONTINUE
31800		LIST(LCNT)=INP(L)
31900		PARENS=-1.
32000		INP(L)=IBLA
32100		LIST(LCNT+1)=I
32200		GO TO 236
32300	C ''''''' FOR SINGLE QUOTES
32400	3361	IPRN=IPRN+1
32500		GO TO 236
32600	C  JUMPS BACK INTO QUOTE SECTION
32700	CQ	IF(PARENS.EQ.0)GO TO 2140
32800	CQ	LIST(LCNT+2)=L
32900	CQ	LCNT=LCNT+3
33000	CQ	PARENS=0
33100	CQ	GO TO 33612
33200	CQ2140	LIST(MOT)=L
33300	CQ	GO TO 33612
33400	CQC )))))))))))  LAST ) CAN'T APPEAR AT END OF LINE!!
33500	C @@@@@@@@@@@@ /@Z/DS3/ ETC. 
33600	2361	IF(N.NE.':')GO TO 2362
33700		ICHD=ICHD+1
33800		N=KSLA
33900		GO TO 336
34000	
34100	2362	IF(N.NE.'@')GO TO 5361
34200		DO 113 L=1,LEND
34300		K=JD+L
34400	C   K IS USED AT 240!!!
34500		JG=INP(K)
34600		IF(JG.NE.'-')GO TO 6113
34700		IF(CODE.EQ.-88.)CALL ERR(8)
34800		RETRO=0
34900		INP(K)=IBLA
35000		GO TO 113
35100	6113	IF(JG.NE.'$')GO TO 7113
35200	C  '$' IS FOR INVERSIONS IN 'NOTES'
35300		IF(CODE.EQ.-88.)CALL ERR(8)
35400		INVRT=0
35500		GO TO 113
35600	7113	IF(JG.NE.IBLA)GO TO 4113
35700	113	CONTINUE
35800	4113	DO 6361 JMOT=1,LCNT,3
35900		IF(JG.NE.LIST(JMOT))GO TO 6361
36000		VX1=0
36100		DO 40 M=JD+2,LEND
36200		JG=INP(M)
36300		IF(JG.EQ.IBLA)GO TO 40
36400	CCZZZ	IF(JG.EQ.KSLA.OR.JG.EQ.ISEMI.OR.JG.EQ.'*')GO TO 140
36500		IF(JG.EQ.KSLA)GO TO 140
36600		IF(JG.EQ.ISEMI)GO TO 140
36700		ML=M
36800		GO TO 240
36900	40	CONTINUE
37000	240	JC=JA
37100		JA=-1
37200		INP(K)=IBLA
37300		CALL SCANR
37400		JA=JC
37500	140	JC=1
37600		KN=LIST(JMOT+1)
37700		M=LIST(JMOT+2)+1
37800		IF(RETRO)GO TO 640
37900		JC=M-1
38000		M=KN-1
38100		KN=JC
38200		JC=-1
38300		RETRO=-1.
38400	640	IF(INVRT)GO TO 940
38500	C INVERSIONS NEXT
38600	840	X=V(KN)
38700		IF(X.GT.-9999.)GO TO 841
38800	C CAN'T INVERT A 'P' NUMBER.
38900		Z=X
39000		GO TO 941
39100	841	RB=X
39200		X=ABS(X)+VX1
39300		Z=X
39400		IF(RB)Z=-Z
39500	941	V(I)=Z
39600	CC	V(I)=X+VX1
39700	C  FINDS CENTER FOR INVERSION (+TRANSP.)
39800		I=I+1
39900		IZ=IZ+1
40000	C IZ USED FOR INTERNAL TEMPO FEATURE (FIXED 6/78)
40100		KN=KN+JC
40200		IF(V(KN-JC).NE.199.)GO TO 940
40300	C 199. IS NOW NUM. FOR 'R' (REST)  7/78
40400		V(I-1)=199.
40500		GO TO 840
40600	
40700	940	Z=V(KN)
40800		IF(Z.LT.-9999.)GO TO 540
40900	C CAN'T INVERT OR TRANSPOSE 'P' NUMBERS.
41000		IF(INVRT.EQ.0)GO TO 440
41100		IF(VX1.EQ.0)GO TO 540
41200	C " @Q N "  WHERE N= 1/2 STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.(NO LIT)
41300		IF(CODE.EQ.-88.)CALL ERR(8)
41400		IF(CODE.EQ.-33.)GO TO 440
41500		V(I)=Z*VX1
41600		GO TO 7361
41700	440	IF(Z.EQ.199.)GO TO 540
41800	C 199. IS NOW NUM. FOR 'R' (REST)  7/78
41900		Y=0
42000		RB=VX1
42100		IF(Z)RB=-RB
42200		IF(INVRT)GO TO 541
42300		RB=-RB
42400		RC=X
42500	C X IS SET FURTHER BACK.
42600		IF(Z)RC=-RC
42700	C THIS STUFF FOR CHORD FEATURE
42800		Y=(RC-Z)*2
42900	541	Z=Z+RB+Y
43000		Y=ABS(Z)
43100		IF(Y.LT.1.OR.Y.GT.108)CALL ERR(8)
43200	C ERROR IF TRANSP. HAS PUSHED A NOTE NUMBER TOO HIGH OR TOO LOW.
43300		V(I)=Z
43400	CC	IF(INVRT.EQ.0)Y=(X-Z)*2.
43500	CC	V(I)=Z+VX1+Y
43600		GO TO 7361
43700	540	V(I)=Z
43800	7361	IF(JC.GT.0)GO TO 543
43900		IF(CODE.NE.-33)GO TO 543
44000		JG=I
44100		IF(V(I).GT.0)GO TO 543
44200	542	Y=V(JG)
44300		V(JG)=V(JG-1)
44400		V(JG-1)=Y
44500	C THIS STUFF FOR CHORD FEATURE
44600		IF(V(JG-2).GT.0)GO TO 543
44700		JG=JG-1
44800		GO TO 542
44900	543	I=I+1
45000		IZ=IZ+1
45100	C IZ USED FOR INTERNAL TEMPO FEATURE (FIXED 6/78)
45200		KN=KN+JC
45300		IF(KN.NE.M)GO TO 940
45400	
45500		INVRT=-1
45600		RB=V(I-1)
45700		DO 8361 L=JD,LEND
45800		JG=INP(L)
45900	C   PUT IN NOV 25, 72
46000	CCZZZ	IF(JG.EQ.ISEMI)GO TO 93612
46100		KN=L
46200		INP(L)=IBLA
46300		IF(JG.EQ.KSLA)GO TO 9361
46400		IF(JG.EQ.')')IPRN=IPRN+1
46500		IF(JG.NE.ISEMI)GO TO 8361
46600		IAMP=-1
46700		GO TO 9361
46800	8361	CONTINUE
46900	C  ABOVE 4 LINES PUT IN 8/76. REPLACE C***********  ↓↓
47000	
47100	9361	MLX=L+1
47200		IF(L.GE.LEND)GO TO 93612
47300	C************9361	MLX=L
47400	C************	IF(L.EQ.LEND)GO TO 93612
47500	C ↑↑↑↑↑↑↑ 6/75
47600	C  FIX THIS & =IBLA BY CHNGING DO LOOP TO 'GO TO' AT 6721,2722
47700		IF(IAMP.NE.0)GO TO 797
47800		IF(QTS)GO TO 1773
47900	C  GO BACK IF NOT END OF LINE
48000	797	JZ=-1
48100	93612	IF(IAMP.EQ.0)GO TO 93611
48200	C   NOV 25, 72
48300	C*** JUNE 78 *** BELOW GOES TO CHECK ON INTERNAL TEMPO *****IF(QTS)GO TO 3013
48400		IF(QTS)GO TO 9004
48500		GO TO 2722
48600	C  THESE ARE FOR "LIT" ITEMS
48700	C  *******  DO NOT USE '@-' OR '@$' WITH 'LIT', RLIST OR RNOT****
48800	C  NO $ WITH FUNC.  $ WITH NUMS AND RHY CAN GIVE NEG RESULT -- TRY IT!
48900	CCZZZ93611	IF(JG.EQ.ISEMI)GO TO 7773
49000	93611	IF(KN.EQ.LEND)GO TO 7773
49100		JZ=0
49200		IF(IPRN.NE.0)GO TO 1773
49300	C ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑PICKS UP ' @X)/ ' SITUATION.  22/6/73
49400		GO TO 236
49500	C  LAST TIME FOR QUOTES
49600	
49700	C********↑↑ ↑↑ WAS TO 6017  JUNE 10,71
49800	C   JUMPS TO END STRING OF QUOTES
49900	6361	CONTINUE
50000		CALL ERR(0)
50100	C @@@@@@@@@@@@@@@@@@@@@@@@@@
50200	5361	IF(N.EQ.'$')CALL ERR(8)
50300	C  FOUND $  BUT NO @!
50400		INPX=INP(JD+1)
50500		IF(N.NE.ID)GO TO 53611
50600		IF(ISUB.NE.1)GO TO 53611
50700		IF(INPX.NE.IF)GO TO 236
50800	C  JUMP IF NOT DUTY FACTOR
50900		IF(JPP)GO TO 236
51000	C JUMP IF 'P' HAS NOT BEEN SEEN.
51100		DF=DF-100.
51200		GO TO 43615
51300	53611	IF(N.NE.ISS)GO TO 53612
51400		IF(INPX.NE.'U')GO TO 53612
51500		DF=DF-200
51600	C  FOR SUBROUTINE FLAG.  CAN'T CALL SUBR AT SAME TIME AS REP OR X!!!!
51700		GO TO 43615
51800	53612	IF(N.NE.'M')GO TO 612
51900		IF(INPX.NE.'I')GO TO 612
52000		DF=DF-200.5
52100	C  THE '.5' CALLS 'MICRO' RATHER THAN 'SUBR'.
52200		GO TO 43615
52300	612	IF(N.NE.IAA)GO TO 43611
52400	C   FINDS 'ALL'.
52500		IF(INPX.NE.'L')GO TO 236
52600		ALL=-1.
52700		GO TO 43615
52800	C  TYPE 'ALL' AFTER PARAM NUM TO PUT DATA IN ALL INSTS.
52900	
53000	C  QUAD CALL MUST BE IN 1ST OF 5 PARAMS.  QUAD MUST BE FOLLOWED
53100	C   BY SPC, / OR ;.  OTHER CALLS SUCH AS MOVE,NUM ETC. CAN
53200	C   APPEAR BEFORE  / OR ;, BUT "ALL" MUST! APPEAR 
53300	C   BEFORE! QUAD (IF USED).
53400	C  ADD AN "F" TO QUAD FOR FUNCTIONS, AN "X" FOR X,Y COORDS.
53500	C BASIC QUAD PRODUCES CIRCLES. /DEGS/RADIUS/CENT. X/CENT. Y/
53600	C  QUADX -- /X /Y / (5TH PARAM WILL ALWAYS BE WASTED)
53700	43611	IF(N.NE.'Q')GO TO 4361
53800		IF(INPX.NE.'U')GO TO 4361
53900		QX=-13.
54000		DO 43612 N=JD,LEND
54100		J=INP(N)
54200		IF(J.EQ.IXX)QX=QX-1.
54300		IF(J.EQ.IF)QX=QX-2.
54400		IF(J.EQ.IBLA)GO TO 236
54500		IF(J.EQ.KSLA)GO TO 236
54600	CCZZZ	IF(J.EQ.IBLA.OR.J.EQ.KSLA.OR.J.EQ.ISEMI.OR.J.EQ.',')GO TO 236
54700	43612	INP(N)=IBLA
54800	4361	IF(N.NE.'I')GO TO 43613
54900		IF(ISUB.NE.4)GO TO 43613
55000	C  -1= 'NM INV' MAKES INST NAME, P1 AND P2 INVISIBLE (REPLACES SEG, ETC.)
55100	C  -2= 'NM IE' MAKES 'END' OF PRINTOUT INVIS. ( ;PRINT(P1)--ETC.)
55200	C  -3= BOTH BEGINNING AND END ARE INVIS.
55300	C  THIS IS SO PARAMS MAY BE EXTENDED TO 58 ON TO A DUMMY INST.
55400		L=-1
55500	CSS	N=INP(JD+1)
55600	CSS	IF(N.EQ.IE)L=L-1
55700		IF(INPX.EQ.IE)L=L-1
55800		INVIS(LK)=INVIS(LK)+L
55900	43615	DO 43614 L=JD,LEND
56000		N=INP(L)
56100	CC	IF(N.EQ.IBLA.OR.N.EQ.KSLA)GO TO 236
56200		IF(N.EQ.IBLA)GO TO 236
56300		IF(N.EQ.ISEMI)GO TO 236
56400	CCZZZ	IF(N.EQ.IBLA.OR.N.EQ.','.OR.N.EQ.ISEMI.OR.N.EQ.KSLA)GO TO 236
56500	43614	INP(L)=IBLA
56600	CC43613	IF(N.NE.KSLA)GO TO 636
56700	43613	IF(N.NE.KSLA)GO TO 1336
56800	CC	JZ=-1
56900		IF(JD.GE.LEND-1)JZ=0
57000	C  SO IT WILL READ NEXT LINE.
57100	CZZZZZZZZZZZZZZZ	INP(JD)=ISEMI
57200		GO TO 336
57300	CCZZZ436	IF(INP(MLX).NE.IBLA)GO TO 336
57400	CCZZZ	MLX=MLX+1
57500	CCZZZ	GO TO 436
57600	CC636	IF(JD.LT.LEND)GO TO 1336
57700	CC	ICON=0
57800	CC	GO TO 77731
57900	CC	GO TO 7773
58000	C  TO CONTINUE ON NEXT LINE.
58100	CCZZZ636	IF(N.NE.ISEMI)GO TO 936
58200	1336	IF(N.NE.ISEMI)GO TO 936
58300		IAMP=-1
58400	CC	IF(ISUB.NE.1)IAMP=-1
58500	336	MLX=JD+1
58600		IF(ISUB.GE.104)GO TO 104
58700		IF(ISUB.GT.3)GO TO 1899
58800	   	GO TO (101,102,103),ISUB
58900	C             PAR  MOV LIST  OTHERS
59000	CCZZZ936	IF(N.NE.IDOT)GO TO 736
59100	936	IF(N.NE.IDOT)GO TO 136
59200		L=INP(JD+1)
59300		DO 836 KL=1,10
59400	836	IF(L.EQ.IDAT(KL))GO TO 236
59500		IF(CODE.EQ.-22..OR.CODE.EQ.-23.)INP(JD)=1
59600		GO TO 236
59700	C   CHANGES DOTTED RHYTHMS TO '1'S.
59800	CCZZZ736	IF(N.NE.'*')GO TO 136
59900	CCZZZ	IAMP=-1
60000	CCZZZ	INP(JD)=IBLA
60100	CCZZZ	GO TO 336
60200	136	IF(N.NE.IQT)GO TO 236
60300		DO 1361 K=JD+1,LEND
60400		IF(INP(K).NE.IQT)GO TO 1361
60500		JD=K+1
60600		GO TO 975
60700	C   SKIPS MATERIAL IN QUOTES
60800	1361	CONTINUE
60900		CALL ERR(0)
61000	C   OPEN QUOTES
61100	236	JD=JD+1
61200		IF(JD.LE.LEND)GO TO 975
61300		CALL ERR(1)
61400	1899	CALL SCANR
61500	CZZZZZZZ	ML=MLX
61600	CZZZZZZZZZZZZZZZZZZZZZZZZZZ
61700		GO TO(1,2,3,4,5,6),ISUB
     

00100	101	N=INP(ML)
00200		IZ=ML
00300		ML=ML+1
00400		IF(N.EQ.IBLA)GO TO 101
00410		M=1
00500		JA=-1
00600	C AT THIS POINT IT LOOKS FOR P=PARM, E=END, D=DUPL, C=CONTINUATION, R=RUN.
00700		IF(N.EQ.IPP)GO TO 1
00800		IF(N.EQ.IE)GO TO 2308
00900		IF(N.NE.'R')GO TO 1101
01000		N=INP(ML)
01100	C   'RUN' MAY REPLACE 'END' FOR LAST INST.
01200		IF(N.EQ.'U')CALL RUNIT
01300	CC	M=1 
01400		LPAR=1
01500	C TYPE 'RD' (P1) FOR RANDOM DEVIATION, 'RR'(P100) FOR RANDOM RESTS.
01600		IF(N.NE.'R')LPAR=NUMP+1
01700		GO TO 201
01800	1101	IF(N.EQ.ID)GO TO 303 
01900		IF(N.NE.'C')CALL ERR(0)
02000	C NEXT FOR 'CONTINUATION'.  AUTOMATICALLY PUSHES UP PARAM NUMS.
02100		IOFSET=IOFSET+1
02200		LPAR=IOLDPR+IOFSET
02300		TYPE 1201,IOFSET
02400		IF(LPAR.GT.NUMP)CALL ERR(6)
02500	2201	IF(INP(ML).EQ.IBLA)GO TO 3201
02600	C  TO MOVE POINTER AHEAD.  MUST HAVE BLANK AFTER 'C' OR 'CO' OR 'CONT', ETC.
02700		ML=ML+1
02800		GO TO 2201
02900	3201	IZ=ML-1
03000		M=0
03100		GO TO 201
03200	1201	FORMAT(' →→→→→→ REMEMBER →→→→→ PARAMETER OFFSET=',I2)
03300	
03400	1	CALL SCANR
03500		IOLDPR=VX1
03600	C SAVE PARAM NUM. FOR POSSIBLE 'CONTINUATION'.  BEWARE OF >P30!!!!
03700		LPAR=IOLDPR
03800	C*******	IF(LPAR.GT.30)GO TO 201
03900		IF(LPAR.GT.NUMP)GO TO 201
04000		LPAR=LPAR+IOFSET
04100		IF(LPAR.GT.NUMP)CALL ERR(6)
04200	C*******	IF(LPAR.GT.30)CALL ERR(6)
04300	201	IJ=LPAR
04400		IF(IJ.GT.NUMP+2)CALL ERR(6)
04500	C**************	IF(IJ.GT.32)CALL ERR(6)
04600	CATCHES PARAM. OUT OF RANGE.
04700		IF(QX.GE.0)GO TO 5703
04800		IJ=LPAR+4
04900	C  SETS UP PARAM FOR QUAD CALL
05000		V(I)=IJ+LK*10000
05100		V(I+1)=2*ALL
05200	C  TEST "ALL" FEATURE HERE!!!!!!!
05300	C  X=-13(DEGREES),=-14(X,Y),=-15(CIRCLE FUNCTS),=-16(LINE FUNCTS)
05400		V(I+2)=QX
05500		I=I+3
05600		QX=0.
05700	5703	IAMP=0
05800		IF(IJ.LE.NP(LK))GO TO 897
05900		IF(IJ.LE.NUMP)NP(LK)=IJ
06000	C*******	IF(IJ.LT.31)NP(LK)=IJ
06100	CC897	IF(LPAR.EQ.NUMP+2)LPAR=1
06200	897	V(I)=LPAR+LK*10000
06300	C  +1=WDCNT, +2=CODE, +3='NM' CCCCC
06400		IJ=I+1
06500		I=I+4
06600		ITMP=0
06700		CODE=0
06800		NFLG=1
06900		ML=IZ+M
07000	C   RE=REP  R=RHY  L=LIT  M=MOVE  MX=MOVX  N=NOTES  NU=NUM  
07100	C   S--L=SUBL  S--N=SUBN  T=TAP  RT=RTAP  RL=RLIST  RN=RNOTES
07200	C  QU=QUADC  QUX=QUADX 
07300	5702	ML=ML+1
07400	CC	IF(ML.GT.72)GO TO 99
07500		N=INP(ML)
07600		IF(N.EQ.IBLA)GO TO 5702
07700		IF(N.EQ.',')GO TO 5702
07800		NL=INP(ML+1)
07900		JA=-1
08000		ISUB=0
08100		IF(N.EQ.IXX)GO TO 2703
08200		IF(N.EQ.'R')GO TO 6702
08300		IF(N.EQ.IF)GO TO 8702
08400		IF(N.EQ.IPP)GO TO 7006
08500		IF(N.NE.'C')GO TO 4005
08600		IF(NL.EQ.'U')GO TO 7006
08700	C  FOR 'CUTOFF'
08800	4005	JA=0
08900		IF(N.EQ.IEN)GO TO 6005
09000		IF(N.EQ.'M')GO TO 703
09100		IF(N.EQ.'L')GO TO 2720
09200		IF(N.EQ.ISS)GO TO 6703
09300		IF(N.EQ.ITT)GO TO 4018
09400		IF(N.EQ.IQT)GO TO 5720
09500		IF(N.EQ.ISEMI)GO TO 2018
09600	C 7/75	IF(N.EQ.IPP)JA=-1
09700	C  FOR ;P5  P3;
09800	7006	CALL SCANR
09900		IF(ISUB.EQ.8)GO TO 8
10000		I=I+JJ
10100		V(IJ+1)=NNUM+DF
10200		IF(JJ.EQ.1)GO TO 4006
10300	C  IF NNUM IS '-2' THEN NOTES ARE PRINTED
10400		IF(NNUM.NE.-2)GO TO 5006
10500		IX=IJ+3
10600		DO 2006 K=2,JJ,3
10700	2006  CALL RANR(VX,K)
10800	C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
10900	5006	IX=IJ+2
11000		DO 6006 K=1,JJ
11100	6006	V(IX+K)=VX(K)
11200		IF(NL.EQ.'U')GO TO 8006
11300	C  JUMP FOR 'CUTOFF'
11400		IF(MOD(JJ,3).NE.0)CALL ERR(12)
11500		V(IX+JJ-2)=1.
11600	C  ABOVE ENSURES THAT LAST RAND. UNIT REACHES 100% - 5/74 *********
11700		GO TO 3013
11800	CCCC NOW DONE IN 'SCANR' 7/78   4006	IF(JA)VX1=-VX1/100.-9999.
11900	C  CHANGES ;P5 P3; TO ;P5 -9999.03; ***** CHECK OUT ON OTHER MACHINES!
12000	CIRC4006	IF(JA)VX1=VX1/100.+9999.
12100	CIRC  CHANGES ;P5 P3; TO ;P5 9999.03; ***** CHECK OUT ON OTHER MACHINES!
12200	4006	V(I-1)=VX1
12300		GO TO 3013
12400	8006	V(IJ+1)=-19
12500	C  FOR 'CUTOFF N1, N2' -- TO END RAND TIMES TOGETHER.
12600		GO TO 3013
12700	6702	IF(NL.EQ.IE)GO TO 2703
12800	C   JUMP IF "REP"
12900		IF(NL.EQ.ITT)GO TO 4018
13000	C   JUMP IF "RTAP"
13100		CODE=-22
13200		IF(NL.EQ.'L')CODE=-46.0
13300	C   JUMP IF "RLIST" (LIST OF RAND SELECTIONS)
13400		IF(NL.NE.IEN)GO TO 1016
13500	C   JUMP IF NOT "RNOTES"
13600		JA=0
13700	C   FOR SCANR
13800		CODE=-36.
13900		GO TO 1016
14000	6005	CODE=-33
14100		IF(NL.EQ.'A')GO TO 2721
14200	C  NUMS, NOTES, NAMES.
14300		IF(NL.NE.'U')GO TO 1016
14400		CODE=-44.
14500	1610	JA=-1
14600		GO TO 1016
14700	8702	CODE=-35
14800		IF(NL.EQ.'U')GO TO 1016
14900		ML=ML+1
15000		CALL SCANR
15100	7	V(IJ+1)=CODE+DF
15200		V(IJ+2)=1.
15300		IF(VX1.GT.99)CALL ERR(4) 
15400	C TRAPS F NUMS >99.
15500		V(I)=VX1+200.
15600	CC	IF(VX1.GT.15)CALL ERR(4) 
15700	C TRAPS F NUMS >15.
15800	CC	V(I)=VX1+85.
15900		GO TO 7703
16000	C********  MOVE IS NEXT ***********
16100	703	BW=V(IJ-2)
16200		IC=0
16300	CC	DO 7031 K=ML+1,72
16400		DO 7031 K=ML+1,LEND
16500		LP=INP(K)
16600		IF(LP.EQ.KSLA)GO TO 8031
16700	CC	IF(INP(K).EQ.ISEMI)GO TO 8031
16800		IF(LP.EQ.IPP)IC=1
16900	C 'MOVP' P7 MOVP/10 3,4.9 5,5.9;MOVES FROM RAN SEL. OF P3,P4 TO P5,P5.
17000	7031	IF(LP.EQ.IXX)IC=-1
17100	C   IC=-1 IS FOR MOVX, IC=0 FOR MOVE, IC=1 FOR MOVP.
17200	8031	I=I-1
17300		V(I)=0
17400		X=-9900.-BY
17500		IF(BY.EQ.0)X=-9900.-BG(LK)
17600	   	IF(BW.EQ.X)GO TO 8005
17700		IF(BW.NE.-9900.-BY)GO TO 1102
17800		V(IJ-2)=X
17900		GO TO 8005
18000	1102	V(IJ)=V(IJ-1)
18100		V(IJ-1)=X
18200		IJ=IJ+1
18300		I=I+1
18400	8005	LP=IJ-1
18500		BW=-9900.-X
18600		ISUB=2
18700		IZ=-1
18800	C  ABOVE ARRANGES NECESSARY BG TIME HEADINGS.
18900	4703	GO TO 1299
19000	102	IF(IZ.LT.0)GO TO 2102
19100	C  SKIPS NEXT FIRST TIME
19200		BW=V(ICT)+BW
19300		V(I)=-9900.-BW
19400		V(I+1)=V(LP)
19500		V(I+2)=(JJ+2)*ALL
19600		V(I+3)=CODE+DF
19700		I=I+4
19800		IZ=1
19900	2102	IF(BW.LT.10000.)CALL BGSORT(BW)
20000	C   ROUND-OFF NONSENSE
20100	2	VX3=-9900.
20200		VX2=VX3 
20300		CALL SCANR
20400		IF(JJ.GT.0)GO TO 5102
20500		JJ=ILIT
20600	C SLASH WILL REPEAT MOVE INPUT -- 6/74
20700		DO 6102 K=1,JJ
20800	6102	VX(K)=VX(K+20)
20900		GO TO 5005
21000	C::::::::::::::: PUT THIS, AND AT 5505, IN SCOR5 ALSO ::::::::::::::
21100	5102	IF(JJ.EQ.4)CALL ERR(9)
21200	C  ERROR -- 4 ITEMS IN MOVE IMPOSSIBLE
21300		IF(VX3.NE.-9900.)GO TO 3102
21400		IF(VX2.NE.-9900.)GO TO 4102
21500		VX2=VX1
21600		VX1=10000.
21700	4102	VX3=VX2
21800		JJ=3
21900	C  1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.
22000	3102	IF(IZ.GE.0)GO TO 3006
22100		V(IJ)=(JJ+2)*ALL
22200	C  WORD COUNT
22300		CODE=-55.
22400		IF(JJ.NE.3)CODE=-57.
22500		IF(NFLG)CODE=CODE-1.
22600		IF(IC)CODE=-59.
22700	C  CODE=-56 OR -58 FOR NOTES.
22800		V(IJ+1)=CODE+DF
22900		IZ=0
23000	3006	IF(NFLG.EQ.1)GO TO 5005
23100		CALL RANR(VX,2)
23200	      IF(JJ.NE.3)CALL RANR(VX,4)
23300	C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
23400	5005	IF(IC.LE.0)GO TO 3003
23500	C NEXT FOR 'MOVP',  MOVE FROM PARAM TO PARAM.
23600		DO 1003 K=2,JJ
23700	1003	VX(K)=-VX(K)/100.0-19999.0
23800	CIRC1003	VX(K)=VX(K)/100.0+9999.0
23900	C  CHANGES PARAM NUMS TO MAGIC NUMS.
24000	3003	ICT=I
24100		ILIT=JJ
24200	C  SAVES FOR SLASH REPEAT FEATURE
24300	  	IJ=IJ+1
24400		DO 1006 K=1,JJ
24500		VX(20+K)=VX(K)
24600	C  SAVES FOR SLASH REPEAT FEATURE
24700	1006	V(IJ+K)=VX(K)
24800		I=I+JJ  
24900		IJ=I+2
25000		IF(IAMP.EQ.0)GO TO 1299
25100	C*************** MAY 18,71 ***** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
25200		V(I)=-9900.-BY
25300		GO TO 8703
25400	
25500	7703	V(IJ)=4.*ALL
25600	8703	I=I+1
25700		GO TO 4773
25800	C   FOR SUBROUTINES, -12=NUMS.  -11=LETTERS.
25900	6703	CODE=-12.
26000		IF(INP(ML+3).EQ.'L')CODE=-11.
26100		V(IJ)=2.*ALL
26200		V(IJ+1)=CODE+DF
26300		I=I-1
26400		GO TO 4773
26500	4018	CNT(LK)=-9900.-BY
26600		P(LK)=V(I-4)
26700	CC 6/74 COLGATE 	JREAD=3
26800	CC 6/74 COLGATE	GO TO 4400
26900	1444	IF(READER(JNP))CALL RUNIT
27000	C  READS A LINE.  IF END OF FILE, JUMPS.
27100	CC443	IF(IFI)REREAD 107,K,IPT(LK,1)
27200	CC	IF(IFI.GE.0)REREAD 8001,IPT(LK,1)
27300	443	IF(LN.NE.0)REREAD 107,K,IPT(LK,1)
27400		IF(LN.EQ.0)REREAD 8001,IPT(LK,1)
27500	C   NAME OF RHYTHM FILE. (ONLY ONE PER INST.)  READS DATA JUST BEFORE RUN
27600		IF(J.EQ.'CONDU')GO TO 444
27700		IF(NL.NE.ITT)GO TO 2338
27800		CODE=-23.
27900		GO  TO 1016
28000	2338	I=I-4
28100		GO TO 4773
28200	3018	CNT(KZY)=-9900.
28300		LK=KZY
28400	C TO PUT 'CONDUCT' FILE NAME IN LAST SLOT (KZY) AT 443
28500		GO TO 1444
28600	444	P(KZY)=980000.
28700		GO TO 2308
28800	C   CAN'T USE 'TAP' OR 'RTAP' WITH INST KZY IF USING 'CONDUCT'.
28900	C  'REP'
29000	2703	ML=ML+1
29100		VX1=0
29200		VX2=0
29300		VX3=0
29400		IF(N.EQ.IXX)GO TO 2704
29500		INP(ML)=IBLA
29600		INP(ML+1)=IBLA
29700	C  WIPES OUT 'EP' IN 'REP'
29800	2704	CALL SCANR
29900	 	V(IJ)=3.
30000		V(IJ+1)=-66.0
30100		IF(VX1.EQ.32.)VX1=1.
30200		IF(VX1.EQ.0)VX1=LPAR
30300		IF(VX2.EQ.0)VX2=LK-1
30400		V(IJ+2)=VX1+VX2*10000.
30500		KL=VX2
30600		IF(DUR(LK).LT.0)DUR(LK)=DUR(KL)
30700		IF(VX3.EQ.0)GO TO 4773
30800		L=VX3
30900		ML=LK+1
31000		DO 1018 KL=ML,L
31100		IF(LPAR.LE.NP(KL))GO TO 997
31200		IF(LPAR.LT.31)NP(KL)=LPAR
31300	997	IF(DUR(KL))DUR(KL)=DUR(LK)
31400	C  TO SET DUR WHEN DUPLICATING NOTES THAT END WITH 'END;;'
31500		V(I)=V(I-4)+10000.
31600		V(I+1)=3.
31700		V(I+2)=-66.
31800		V(I+3)=V(I-1)
31900	1018	I=I+4
32000		GO TO 4773
32100	
32200	2018	IF(DF.EQ.0)GO TO 20181
32300	C NEXT FOR Pn SUBR/ I.E. NOTHING BUT P AND SUB CALL. 7/73
32400		V(IJ+1)=-201.
32500		V(IJ+2)=1.
32600		V(IJ+3)=0
32700		GO TO 7703
32800	20181	V(IJ)=3.
32900		V(IJ+1)=-66.
33000		V(IJ+2)=NW+LK*10000
33100		GO TO 4773
33200	C  READS /P5  .3 "ABC" .7 "XYZ"/
33300	
33400	8 	IF(MOD(JJ,2).NE.0)CALL ERR(12)
33500		IF(LPAR.EQ.2)CALL ERR(13)
33600		V(IJ+1)=-77.+DF
33700	C  DF HAS SUBR CALL INFO
33800		I=I+1
33900		VX(JJ-1)=1
34000	C  FOR RAND. SINGLE LITS.
34100		DO 3722 K=1,JJ,2
34200		V(I)=VX(K)
34300	3722	I=I+1
34400		V(IJ+2)=JJ/2
34500		V(IJ+3)=I
34600		DO 4722 K=2,JJ,2
34700		KN=I
34800		I=I+1
34900		L=VX(K)
35000		DO 6722 KL=L,LEND
35100		IF(INP(KL).EQ.IQT)GO TO 4722
35200		IV(I)=INP(KL)
35300	6722	I=I+1
35400	4722	V(KN)=I-KN-1
35500		V(IJ)=(I-IJ)*ALL
35600		GO TO 4773
35700	2720	QTS=0
35800	2721	ISUB=104
35900		IF(NL.EQ.'A')ISUB=ISUB+1
36000		GO TO 1299
36100	
36200	104	IF(ISUB.EQ.104)GO TO 1041
36300	C NEXT FOR INST NAME CHANGES.  Pn NAMES/N;
36400	C  V LIST= n000n/WDCNT/-89/NUM OF DUPLS/INST NAME/NUM OF LETTERS IN NAME/
36500	C  *********** NO 'ALL' OR 'DUPL' FEATURES WITH NAMES **************
36600		V(IJ)=5
36700		V(IJ+1)=-89
36800		CALL SCANR
36900		V(I-1)=VX1
37000		IV(I)=INST(LK)
37100	CXX	IV(I+1)=2**(1+(7-LETRS)*7)
37200		I=I+2
37300		GO TO 4773
37400	1041	KL=0
37500		CODE=-88.
37600		DO 6721 K=ML,LEND
37700		L=INP(K)
37800		IF(L.EQ.IBLA)GO TO 6721
37900		JC=K+1
38000		IF(L.EQ.IQT)GO TO 7721
38100		IF(L.EQ.KSLA)GO TO 7232
38200		IF(L.EQ.ISEMI)GO TO 7232
38300		IF(L.NE.IF)GO TO 1040
38400		IF(INP(K+1).NE.'I')GO TO 1040
38500		IF(INP(K+2).NE.IEN)GO TO 1040
38600		IF(INP(K+3).NE.IE)GO TO 1040
38700	C FINDS THE WORD "FINE".
38800		V(I)=-10000.
38900		IF(DUR(LK))DUR(LK)=10000
39000		GO TO 1042
39100	1040	IF(L.EQ.'%')INP(K)=KSLA
39200		IF(L.EQ.'?')INP(K)=ISEMI
39300		IF(L.EQ.'!')INP(K)=','
39400		IF(L.EQ.'#')INP(K)='<'
39500		IF(L.EQ.'&')INP(K)='"'
39600	C  THE ABOVE ARE ALL SPECIAL CHAR'S TO AVOID VARIOUS CONFUSIONS.
39700		IF(KL.EQ.0)KL=K
39800	6721	CONTINUE
39900	C  FOR REPEAT OF ITEM BY SLASH
40000	C  KL IS START OF QUOTE, THEN K IS END -- WHEN NO "S ARE USED.
40100	7232	IF(KL.EQ.0)GO TO 7233
40200		JC=KL
40300		ML=K+1
40400		JD=K-1
40500		NLIT=K-KL
40600		GO TO 8721
40700	
40800	7233	DO 7230 KL=ILIT,ILIT+NLIT
40900		V(I)=V(KL)
41000	7230	I=I+1
41100		GO TO 27222
41200	7231	CONTINUE
41300	
41400	5720	IAMP=-1
41500		JC=ML+1
41600	C  FOR SINGLE 'LIT' ITEMS.
41700	7721	DO 1722 KL=JC+1,LEND
41800		IF(INP(KL).NE.IQT)GO TO 1722
41900		JD=KL-1
42000		ML=KL+1
42100		NLIT=KL-JC
42200	C   EXTENT OF LIT ITEM IS FOUND
42300		GO TO 8721
42400	1722	CONTINUE
42500	C  CAN'T USE SLASH FOR REPEAT AFTER @Q
42600	8721	V(I)=NLIT
42700		ILIT=I
42800		DO 9721 K=JC,JD
42900	C   PUTS ITEM IN "IV" ARRAY
43000		I=I+1
43100	9721	IV(I)=INP(K)
43200		I=I+1
43300	27222	IF(IAMP.EQ.0)GO TO 1299
43400	2722	V(I)=999.
43500	1042	QTS=-1.
43600		CODE=-88.
43700	CXCX	X=-88.
43800	CNEW	IF(ISUB.EQ.105)X=-89.
43900	C 105, -89. FOR LIST OF NAMES FOR INST. NAME CHNGS.
44000		IF(LPAR.EQ.2)CALL ERR(13)
44100	C NO 'LIT' WITH P2!!
44200		V(IJ+1)=CODE+DF
44300	CXCX	V(IJ+1)=X+DF
44400		V(IJ)=(I-IJ+1)*ALL
44500		IJ=IJ+2
44600		V(IJ)=IJ+1
44700		I=I+1
44800		ISUB=1
44900		GO TO 1299
45000	
45100	303	IF(INP(ML).NE.IF)GO TO 7720
45200	C NEXT FOR 'DF' DUTY FACTOR IN PLACE OF A Pn.  (TAKE OUT OLD DF STUFF LATER.)
45300	CC	ML=ML+1
45355	C 'M' IS USED AFTER 897 INSTEAD OF 'ML'
45400		LPAR=NUMP+2
45500	C USE P101 FOR DF.
45600		GO TO 201
45700	
45800	7720	V(I)=LK
45900		V(I+1)=3.
46000		V(I+2)=-67.
46100		ML=ML+4
46200		IF(JRSTA.EQ.0)CALL SCANR
46300		IF(VX1.EQ.0)VX1=LK-1
46400	C DUPL 0; = DUPL PREV. INST. NUM
46500	 	V(I+3)=VX1
46600		I=I+4
46700		L=VX1
46800		IF(NP(LK).LT.NP(L))NP(LK)=NP(L)
46900		IF(DUR(LK).LT.0)DUR(LK)=DUR(L)
47000		IF(JRSTA.NE.0)GO TO 2173
47100	C GO BACK IF THIS WAS AN AUTOMATIC 'DUPL' WITH A 'RESTART'
47200		GO TO 4773
47300	C   TYPE 'DUPL N;'   N=INST # TO BE DUPLICATED.
47400	142	FORMAT(I,15A5) 
47500	1301	FORMAT(15A5) 
47600	1302	FORMAT(1X15A5) 
47700	CCC2773	FORMAT(I,A5,72A1) 
47800	CC2114  FORMAT(I,80A1)
47900	300	FORMAT(I,3F,A1)
48000	301	FORMAT(3F,A1)
48100	6	IF(J.NE.'PRECE')GO TO 1341
48200	C  'PRECEDE' WRITES LINES DIRECTLY ON DSK, BEFORE THE WORD 'PLAY;'.
48300	C  NO LIMIT TO THE NUMBER OF LINES.  LAST LINE (NOT PRINTED) MUST 
48400	C  BEGIN WITH *.     KNP ARRAY (15) IS EQUIV. TO INP .
48500	4341	IF(ITYP)GO TO 5341
48600		TYPE TPALN
48700		ACCEPT 1301,KNP
48800		CALL SHORT(KNP,K)
48900		WRITE(21,1301)(KNP(JD),JD=1,K)
49000		GO TO 6341
49100	5341	IF(LN.EQ.0)GO TO 2341
49200	CC5341	IF(IFI.GE.0)GO TO 2341
49300		READ(23,142,END=7341)K,KNP
49400		GO TO 3341
49500	7341	CALL ERR(10)
49600	C   GO TO ERROR ROUTINE IF MISSING "*".
49700	2341	READ(23,1301,END=7341)KNP
49800	3341	CALL SHORT(KNP,K)
49900	C  DON'T TYPE TRAILING BLANKS
50000		IF(MX.EQ.22)GO TO 6341
50100		IF(SOS)TYPE 1302,(KNP(JD),JD=1,K)
50200	6341	IF(MX.EQ.22)WRITE(JOUT,1302)(KNP(JD),JD=1,K)
50300		REREAD 77732,JD
50400	C 77732 READS A1 FORMAT.
50500		IF(JD.EQ.'*')GO TO 2308
50600		IF(MX)WRITE(1,1301)(KNP(JD),JD=1,K)
50700	CC	IF(MX)WRITE(23,1301)KNP
50800		GO TO 4341
50900	1341	KB=KB+1
51000		IF(JED.GT.0)JED=0
51100		IF(J.EQ.'INSER')GO TO 1340
51200		OTH(KB,1)=VX1*100000.+VX2*100.+VX3   
51300		GO TO 340   
51400	1340	X=VX1
51500		IF(VX2.NE.0)X=1000000.+VX1*100000.+VX2    
51600		OTH(KB,1)=X
51700		GO TO 1338
51800	C   ABOVE IS TO PUT INSERT AFTER NOTE # OF A PARTICULAR
51900	C   INSTRUMENT.  FOR COMMENT AT START, SET BG TIME TO 1,1 
52000	C   - BEGIN LINE WITH  <,END WITH ; 
52100	C   UP TO 75 CHARACTERS MAY BE TYPED.     
52200	340      IF(VX3.NE.2)GO TO 1338 
52300		IF(ITYP.GE.0)GO TO 449
52400	CC	JREAD=5
52500	CC 6/74  COLGATE	GO TO 4400
52600		IF(READER(JNP))CALL RUNIT
52700	C  READS A LINE.  IF END OF FILE, JUMPS.
52800	445	OTH(KB,3)=1.
52900	CC	IF(IFI.GE.0)GO TO 447
53000		IF(LN.EQ.0)GO TO 447
53100		REREAD 300,K,OTH(KB,2)
53200		GO TO 1447
53300	447	REREAD 301,OTH(KB,2)
53400	CIRC447	REREAD 301,OTH(KB,2)
53500	1447	IF(JED)GO TO 2308
53600	3445	TYPE TEDIT
53700		ACCEPT 77732,K
53800		IF(K.EQ.IG)JED=-1
53900		IF(J.EQ.'INSER')GO TO 3446
54000		IF(K.NE.'Y')GO TO 2308
54100		IF(JED)GO TO 2308
54200	449	TYPE TPALN
54300		ACCEPT 301,OTH(KB,2)
54400		IF(JED)WRITE(21,301) OTH(KB,2)
54500		GO TO 2308
54600	
54700	1338	IF(ITYP.GE.0)GO TO 1449
54800	CC	JREAD=6
54900	CC 6/74 COLGATE	GO TO 4400
55000		IF(READER(JNP))CALL RUNIT
55100	C  READS A LINE.  IF END OF FILE, JUMPS.
55200	CC446	IF(IFI.GE.0)GO TO 448
55300	446	IF(LN.EQ.0)GO TO 448
55400		REREAD 142,K,(OTH(KB,JD),JD=2,16)    
55500		GO TO 1446
55600	448	REREAD 1301,(OTH(KB,JD),JD=2,16)    
55700	1446	IF(JED)2446,3445,2446
55800	3446	IF(K.NE.'Y')GO TO 2446
55900		IF(JED)GO TO 2446
56000	1449	TYPE TPALN
56100		ACCEPT 1301,(OTH(KB,JD),JD=2,16)
56200		IF(JED)WRITE(21,1301)(OTH(KB,JD),JD=2,16)
56300	2446	X=OTH(KB,2)
56400		IF(J.NE.'INSER')GO TO 971
56500		IF(VX3.EQ.0)GO TO 971
56600		IF(X.NE.'*')GO TO 6
56700	971	IF(X.EQ.'*')KB=KB-1
56800	C   ALLOWS SEVERAL LINES OF 'INSERT' IF ANY 3RD #.
56900	C   LAST LINE HAS '*' IN COLUMN 1.
57000		GO TO 2308
57100	C   IF NO PARAM NUM IS GIVEN, ALL PARAMS MUST BE TYPED.
57200	C   INSERT MAY INCLUDE 10 CHARS(P3-P30),
57300	C   P2, A # ONLY.  IF MORE THAN 1 PARAM IS TO BE EDITED AND
57400	C   P2 IS ONE OF THEM, FIRST EDIT P2 TO DESIRED VALUE,
57500	C   CHANGE P2 TO MINUS = THEN INSERT ENTIRE NOTE TO PLAY
57600	C   JUST AFTER ORIGINAL NOTE(WHICH WILL BE A REST).
57700	C   BX=INST N. Y=NOTE N. Z=PARAM N. 
     

00100	1106	KTMP=1
00200	CC	TP=60.
00300		IAMP=0
00400		BW=BY
00500		ITMP=-1
00600		ISUB=5
00700		JA=-1
00800		GO TO 2016
00900	3019	V(I)=990000.00
01000		V(I+1)=4.
01100		V(I+2)=VX1
01200		V(I+3)=VX2
01300		V(I+4)=VX3
01400	CC	V(I+3)=VX2/TP
01500	CC	V(I+4)=VX3/TP
01600		I=I+5
01700		BY=BW
01800	C  SEPT 18, 70
01900		IF(VX1.EQ.0)GO TO 2308
02000		BW=BW+VX1
02100		V(I)=-9900.-BW
02200		I=I+1
02300		CALL BGSORT(BW)
02400	9003	IF(IAMP)GO TO 4003
02500	2016	VX3=0
02600		VX2=0
02700		GO TO 1299
02800	5	IF(VX2.NE.0)GO TO 105
02900	C  'TEMPO/120;'  OR  'TEMPO/1.5 72;'  IS OK.
03000		VX2=VX1
03100		VX1=0
03200	105	IF(VX2.GE.12.)VX2=VX2/60.
03300	C TEMPO < 12 = A FACTOR, ≥12 = MM. NUM.
03400	   	IF(VX3.GE.12.)VX3=VX3/60.
03500		IF(VX3.EQ.0)VX3=VX2
03600	CC105	IF(VX3.EQ.0)VX3=VX2
03700	CC	IF(VX2.LT.11.)TP=1.
03800		IF(J.EQ.ITMPO)GO TO 3019
03900	  	PCH(1,KTMP)=VX1
04000		PCH(2,KTMP)=VX2
04100		PCH(3,KTMP)=VX3
04200	C   PCH(1)=TIME  (2)=MM1  (3)=MM2
04300		KTMP=KTMP+1
04400		IF(IAMP.EQ.0)GO TO 2016
04500	4003	VX1=0
04600		IAMP=0
04700		VX2=VX3
04800		IF(J.EQ.ITMPO)GO TO 3019
04900		PCH(1,KTMP)=0
05000		PCH(2,KTMP)=VX2
05100		PCH(3,KTMP)=VX2
05200	C   MM CAN BE FROM 11 UP  TEMPO FACTOR FROM 10 DOWN.  
05300	C   UP TO 30 TEMPO CHANGES MAY BE MADE.   
05400	
05500	1016      IA=I    
05600	      IZ=1  
05700	3100	V(I-2)=CODE+DF
05800	      ISUB=3     
05900	5016	IF(IAMP.GE.0)GO TO 1299
06000	117	IF(IZ-2)3013,9004,9004
06100	103	K=INP(ML)
06200		IF(K.EQ.ITT)GO TO 1106
06300		IF(K.EQ.KSLA)GO TO 1014
06400		IF(K.EQ.ISEMI)GO TO 1014
06500	CZZZZZZZZZZZZ  CC  ZZZZZZZZZZZZ
06600	CCC NOW DONE IN 'SCANR'  	IF(K.NE.IPP)GO TO 1010
06700	CCC	IF(JA.GE.0)GO TO 1899
06800	CCC	JA=-2
06900	CCC	GO TO 1011
07000	1010	IF(K.NE.IBLA) GO TO 1899
07100	1011	ML=ML+1
07200		GO TO 103
07300	3	IF(VX1.EQ.-99.)GO TO 4022
07400		IF(CODE.EQ.-22.)GO TO 2017
07500	  	IF(CODE.LT.-23)GO TO 17
07600		IF(IZ/2*2.EQ.IZ)GO TO 17
07700	C    CHECKS PAIRS OF NUMBERS FOR 'RTAP'
07800	2017	IF(VX1.LT.-9999.)GO TO 3017
07900	CZZ2017	IF(VX1.EQ.-10000.)GO TO 17
08000	CIRC2017	IF(VX1.EQ.10000.)GO TO 17
08100	      VX1=4./VX1
08200		IF(JJ.NE.1)GO TO 2014
08300	3017	V(I)=VX1
08400		GO TO 114
08500	
08600	1217	IF(VX1.EQ.-10000.)GO TO 114
08700	CIRC1217	IF(VX1.EQ.10000.)GO TO 114
08800	C    FOR "FINE" IN LIST
08900	      V(I+1)=VX2
09000	      IF(CODE.EQ.-36.)CALL RANR(V,I)
09100	2217	I=I+1
09200	C  SETS UP STRING OF RAND SELECTIONS
09300		GO TO 114
09400	3217	V(I)=V(I-2)
09500		V(I+1)=RB
09600	C  FOR SLASH REPTS OF RAND SELEC UNITS. ("REP" CAN'T BE USED!)
09700		GO TO 2217
09800	C******** PUT IN ERROR TRAP FOR "REP" ETC. ******
09900	
10000	2014	DO 9006 L=2,JJ
10100		IF(VX(L).EQ.0)GO TO 17
10200	9006	VX1=4./VX(L)+VX1
10300		JJ=1
10400	CCC NOW DONE IN 'SCANR'   17	IF(JA.NE.-2)GO TO 1012
10500	CCC	VX1=-9999.0-VX1/100.0
10600	CCC	JA=-1
10700	CCC1012	IF(ICHD.EQ.0)GO TO 4014
10800	17  	IF(ICHD.EQ.0)GO TO 4014
10900		JJ=1
11000	C  SETS UP NEXT NOTE AS CHORD (THIS ONE BECOMES NEG.)
11100		VX1=-VX1
11200	C  FOR CHORD FEATURE
11300		ICHD=0
11400	4014	V(I)=VX1
11500		IF(CODE.EQ.-46.)GO TO 1217
11600		IF(CODE.EQ.-36.)GO TO 1217
11700		IF(CODE.NE.-35)GO TO 972
11800	C****************** 8/78	IF(VX1.GT.15)CALL ERR(4)
11900	C  FINDS F NUM.>15!
12000	C  JUMP IF STRING OF RAND SELECS.
12100	972	IF(JJ.EQ.1)GO TO 114
12200		L=VX(JJ)-1
12300		X=V(I)
12400		NL=I+1
12500		I=L+I
12600		DO 1017 K=NL,I
12700	1017	V(K)=X
12800	C   ADDS UP TOTAL   OF NOTES IN SEQ.
12900		IZ=IZ+L
13000		GO TO 114
13100	1014	IF(CODE.EQ.-46.)GO TO 3217
13200		IF(CODE.EQ.-36.)GO TO 3217
13300		IF(CODE.NE.-33)GO TO 1103
13400		IF(V(I-2).GE.0)GO TO 1103
13500	C NEXT FOR SLASH REPEAT OF CHORD
13600	CCC	I=I-1
13700		JC=1
13800		JD=1
13900		GO TO 2103
14000	1103	V(I)=RB
14100	C   RB SAVES IT FOR SLASH REPEAT
14200	114      RB=V(I)     
14300	      I=I+1 
14400	      IZ=IZ+1     
14500	      GO TO 5016    
14600	4022	JC=VX2+.3
14700		JD=VX3-.5
14800		IF(JJ.EQ.2)JD=1
14900	C********* MAY 19,71   ----MANY LINES ABOVE.
15000	2103	IZ=IZ+JC*JD 
15100	C   JD=HOW MANY TIMES,  JC=HOW MANY NOTES 
15200		IF(CODE.NE.-33)GO TO 3103
15300	8103	N=0
15400		V(IA-1)=0
15500		DO 4103 K=I-1,1,-1
15600		IF(V(K).GE.0)GO TO 7103
15700		IF(V(K).GT.-9999.0)GO TO 4103
15800	C NEG. NUMBS USUALLY ARE CHORD NOTES,   -9999.N IS SECONDARY PARAM.
15900	7103	N=N+1
16000	4103	IF(N.EQ.JC)GO TO 5103
16100	5103	IF(V(K-1).GE.0)GO TO 6103
16200		IF(V(K).EQ.0)GO TO 6103
16300		K=K-1
16400		GO TO 5103
16500	6103	JC=I-K
16600	CC	I=I+1
16700	
16800	3103	DO 1005 K=1,JD    
16900		NL=I+JC-1  
17000		DO 2005 L=I,NL    
17100	2005  V(L)=V(L-JC)
17200	1005      I=I+JC  
17300		RB=V(NL)
17400	C  RB SAVES DATA FOR SLASH REPEAT FEATURE.
17500	      GO TO 5016  
17600	
17700	9004	IF(ITMP.EQ.0)GO TO 3013
17800		IZ=IZ-1
17900	C***** JAN. 1974
18000	      KA=1  
18100	      IC=1  
18200	      K=0   
18300		J=1
18400	      Z=0   
18500	      RC=0  
18600	9007	Y=PCH(3,IC)
18700		X=PCH(2,IC)
18800	CC9007	Y=PCH(3,IC)/TP
18900	CC	X=PCH(2,IC)/TP
19000	      Z=PCH(1,IC) 
19100		CALL SQYY(YY,X,Y,Z)
19200		XT(1)=X
19300	      PR=RA 
19400	C75      RD=1  
19500	C75      RB=0  
19600	      ZZ=Z  
19700	      CALL ACCEL
19800	      IF(K.EQ.IZ)GO TO 3013
19900		IF(RA.NE.-10000.)GO TO 9007     
20000	C********* MAY 13,71  OMITS REPEATED RHY. FEATURE.
20100	3013	X=I-IJ
20200		V(IJ+2)=X-3.
20300		V(IJ)=X*ALL
20400		IF(CODE.NE.-35)GO TO 4773
20500		M=IJ+3
20600	C   SETS NUMBERS FOR FUNCS.
20700		DO 313 K=M,I-1
20800		X=V(K)
20900		IF(X.LT.-9999.)GO TO 313
21000	CATCHES 'FINE'(-10000), F1-F99 ONLY PLEASE. USE  NEG. FOR REST IN FUNC LIST.
21100	CC	IF(X.LE.0)V(K)=85.
21200	CC	IF(X.EQ.85)GO TO 313
21300	C 'R' CAN APPEAR IN FUNC LIST  (BUT NOW YOU CAN'T USE F85!!!)
21400	CC	IF(X.GT.15.)CALL ERR(4)
21500	CC	V(K)=X+85.
21600		V(K)=X+200.
21700		IF(X.LT.0)V(K)=199.
21800	CCC	IF(X.LT.85.)V(K)=X+85.
21900	313	CONTINUE
22000		GO TO 4773
22100	
22200		END